package com.ai.dmc.index.common.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Field;
import java.util.Date;
import java.util.Iterator;

import com.ai.dmc.index.common.InitParam;

import net.sf.json.JSONObject;

/**
 * 
 * @Description : 系统参数配置文件读取
 * 
 * @author : wucm
 * @date : 2015年4月5日 下午9:43:34
 * @version V1.0
 * 
 */
public class InitParamUtil {
	/**
	 * 
	 * @Description : 初始化系统参数
	 * @param WEB_APP_PATH
	 * @return void
	 * 
	 * @author : wucm
	 * @date : 2015年7月20日 下午2:50:21
	 * 
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static void loadInitParam(String WEB_APP_PATH) {
		String filePath = WEB_APP_PATH + "/WEB-INF/config/initParam.json";
		filePath = filePath.replaceAll("//", File.separator);

		String content = loadInitParamFile(filePath);

		// 屏蔽系统差异，替换tab、换行符
		content = content.replaceAll("\t", "").replaceAll("\n", "");

		JSONObject j = JSONObject.fromObject(content);
		if (null == j || j.isEmpty()) {
			return;
		}

		// 通过反射设置值
		Class c = InitParam.class;
		Iterator<String> it = j.keys();
		try {
			while (it.hasNext()) {
				String key = it.next();
				String value = j.getString(key);
				Field f = c.getDeclaredField(key);
				String type = f.getType() + "";

				if (type.endsWith("boolean")) {
					if ("true".equals(value)) {
						f.setBoolean(c, true);
					} else if ("false".equals(value)) {
						f.setBoolean(c, false);
					}
				} else if (type.endsWith("int")) {
					int i = Integer.parseInt(value);
					f.setInt(c, i);
				} else {
					f.set(c, value);
				}

				printInitParam(key, value);
			}
		} catch (Exception e) {
			System.out.println(e.toString());
		}
	}

	/**
	 * 
	 * @Description : 读取参数文件
	 * @param filePath
	 * @return
	 * @return String
	 * 
	 * @author : wucm
	 * @date : 2015年7月20日 下午2:47:13
	 * 
	 */
	private static String loadInitParamFile(String filePath) {
		BufferedReader reader = null;
		String content = "";

		try {
			FileInputStream fileInputStream = new FileInputStream(filePath);
			InputStreamReader inputStreamReader = new InputStreamReader(
					fileInputStream, "UTF-8");
			reader = new BufferedReader(inputStreamReader);
			String tempString = null;
			while ((tempString = reader.readLine()) != null) {
				if (tempString.indexOf("/*") != -1) {
					continue;
				}
				content += tempString;
			}
			reader.close();
		} catch (IOException e) {
			System.out.println(e.toString());
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException e) {
					System.out.println(e.toString());
				}
			}
		}

		return content;
	}

	/**
	 * 
	 * @Description : 打印系统参数
	 * @param name
	 * @param value
	 * @return void
	 * 
	 * @author : wucm
	 * @date : 2015年7月20日 下午2:56:44
	 * 
	 */
	private static void printInitParam(String name, Object value) {
		System.out.println("【系统参数初始化】" + name + "：" + value);
	}

	/**
	 * 
	 * @Description : 判断参数配置文件是否需要重新加载
	 * 
	 *              判断依据：修改时间和当前系统时间在10s之内就重新加载，否则就不重新加载
	 * 
	 * @return void
	 * 
	 * @author : wucm
	 * @date : 2015年11月6日 下午4:44:49
	 * 
	 */
	public static boolean needReflashInitParam(String WEB_APP_PATH) {
		boolean needReflash = false;

		String filePath ="/config/initParam.json";
		filePath = filePath.replaceAll("//", File.separator);

		File f = new File(filePath);
		long modifyTime = f.lastModified();
		long curTime = new Date().getTime();

		if (Math.abs(curTime - modifyTime) / 1000 < 10) {
			needReflash = true;
		}

		return needReflash;
	}
}
